package com.qf.smsplatform.strategy.service.impl;

import com.qf.smsplatform.common.constants.CacheConstants;
import com.qf.smsplatform.common.constants.StrategyConstants;
import com.qf.smsplatform.common.model.StandardSubmit;
import com.qf.smsplatform.strategy.service.api.CacheService;
import com.qf.smsplatform.strategy.service.Strategy;
import com.qf.smsplatform.strategy.utils.PushMsgUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Author: LeeRui
 * 2021/1/27 下午 9:18
 * 黑名单过滤策略(限制某些号码的消息的发送)
 **/
@Service(value = "black")
@Slf4j
public class BlackListStrategy implements Strategy {

    @Autowired
    private CacheService cacheService;

    @Autowired
    private PushMsgUtil pushMsgUtil;

    @Override
    public boolean strategy(StandardSubmit standardSubmit) {
        log.info("【黑名单过滤策略】 黑名单过滤策略开始执行！！！");

        //获取目标手机号
        String mobile = standardSubmit.getDestMobile();

        //使用sismember判断 member 元素是否是集合 key 的成员
        Boolean aBoolean = cacheService.sismember(CacheConstants.CACHE_PREFIX_CLIENT_KEY, mobile);
        if (!aBoolean){
            log.info("【黑名单过滤策略】 黑名单过滤策略验证成功！！！");
            return true;
        }else {
            log.info("【黑名单过滤策略】 黑名单过滤策略验证失败！！！");

            // 将submit发送到写日志topic队列中,让ES保存当前Submit信息
            pushMsgUtil.sendLog(standardSubmit, StrategyConstants.STRATEGY_ERROR_BLACK);

            // 将StandardReport对象封装,发送到状态报告topic队列中,让接口模块给用户推送
            pushMsgUtil.pushReport(standardSubmit,StrategyConstants.STRATEGY_ERROR_BLACK);
            return false;
        }
    }
}
